package com.masita.ventanas;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JLabel;

import com.masita.logica.Cuota;
import com.masita.logica.EntregaCondicionada;
import com.masita.logica.Pedido;
import com.masita.logica.Venta;
import com.masita.util.Utilidad;


public class VCrearVentaPedido extends JDialog {
	
	private static int PEDIDO = 0;
	private static int ENTREGA = 1;
	private int operacion = -1;
	
	private Pedido pedido = null;
	private EntregaCondicionada entrega = null;
	private Venta venta = null;
	
	// FORMA DE PAGO **************************************
	private JLabel etForma = new JLabel("Forma de Pago");
	
	private JComboBox lForma = new JComboBox();
	private DefaultComboBoxModel mForma = null;

	// BOTONES ********************************************
	private JButton bAceptar = new JButton("Registrar");
	private JButton bCancelar = new JButton("Cancelar");
	
	public VCrearVentaPedido(JDialog p, Pedido ped){
		super(p,"Registrar Venta",true);
		this.pedido = ped;
		this.operacion = PEDIDO;
		init();
	}

	public VCrearVentaPedido(JDialog p, EntregaCondicionada ent){
		super(p,"Registrar Venta",true);
		this.entrega = ent;
		this.operacion = ENTREGA;
		init();
	}
	
	private void init(){
		this.getContentPane().setLayout(null);
		
		this.getContentPane().add(etForma);
		etForma.setBounds(10,10,100,20);

		this.getContentPane().add(lForma);
		lForma.setBounds(110,10,100,20);
		mForma = new DefaultComboBoxModel();
		mForma.addElement(Utilidad.PAGO_CONTADO);
		mForma.addElement(Utilidad.PAGO_SEMANAL);
		mForma.addElement(Utilidad.PAGO_QUINCENAL);
		mForma.addElement(Utilidad.PAGO_MENSUAL);
		lForma.setModel(mForma);
		lForma.setSelectedIndex(-1);
		
		this.getContentPane().add(this.bAceptar);
		bAceptar.setBounds(20,40,80,20);
		bAceptar.addActionListener(new java.awt.event.ActionListener(){
			public void actionPerformed(java.awt.event.ActionEvent e){
				if( validarDatos() ){
					guardarVenta();
					dispose();
				}
			}
		});
		
		this.getContentPane().add(this.bCancelar);
		bCancelar.setBounds(120,40,80,20);
		bCancelar.addActionListener(new java.awt.event.ActionListener(){
			public void actionPerformed(java.awt.event.ActionEvent e){
					dispose();
			}
		});
	}
	
	private boolean validarDatos(){
		if( this.lForma.getSelectedIndex() == -1 ){
			VentanaMensaje v = new VentanaMensaje(this,"Error","Seleccione una Forma de Pago para la Venta",false);
			return false;
		}
		return true;
	}

	private void guardarVenta(){
		if( this.operacion == PEDIDO ){
			this.venta = Venta.crearVentaDePedido(this.pedido);
			// CAMBIA EL ESTADO DEL PEDIDO ********************
			this.pedido.setEstado(Utilidad.ESTADO_PEDIDO_ENTREGADO);
			// NO LO GUARDA, SOLO CAMBIA EL ESTADO ************
			// SE GUARDA CUANDO ACEPTO EN LA VENTANA FICHAS ***
			// ************************************************
		}
		else if( this.operacion == ENTREGA ){
			this.venta = Venta.crearVentaDeEntrega(this.entrega);
		}

		this.venta.setFormaPago(lForma.getSelectedItem().toString());
		
		if( this.venta.getFormaPago().equals(Utilidad.PAGO_CONTADO) ){
			VAddDescuento ventana = new VAddDescuento(this);
			ventana.mostrar();

			this.venta.setDescuento(ventana.descuento);			
			if( this.venta.getCuotas() != null  ){
				Cuota c = (Cuota)this.venta.getCuotas().elementAt(0);
				this.venta.removeCuotaVenta(c);
				c = new Cuota(0,this.venta.getIdFicha(),venta.getIdVenta(),
						Utilidad.getFechaHoy(),venta.getTotalConPorcentaje(),false);
				this.venta.addCuotaVenta(c);
			}
			else{
				Cuota c = new com.masita.logica.Cuota(0,0,0,Utilidad.getFechaHoy(),
							  this.venta.getTotalConPorcentaje(),false);
				this.venta.addCuotaVenta(c);
			}
		}		
	}
	
	public Venta getVenta(){
		return this.venta;
	}
	
	// METODO MOSTRAR DE LA CLASE *************************
	public void mostrar(){
		this.setResizable(false);
		this.setSize(220,100);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
	}	
}
